//
// Created by hjie on 23-8-24.
//

#pragma once

#include <cstring>
#include <vector>
#include <string>
#include <memory>
#include <functional>
extern "C"
{
#include <libavutil/avutil.h>
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libavutil/frame.h>
#include <libavutil/hwcontext.h>
#include <libavutil/pixfmt.h>
}

class InputFileData;
class OutputFileData;

AVPixelFormat GetHwPixelFormat(AVCodecContext * codec_ctx, const AVPixelFormat * av_pixel_formats);

AVPixelFormat GetFormatForInputHwFrameCtx(AVCodecContext  * codec_ctx, const AVPixelFormat * av_pixel_formats);

void GetFormatForOutputHwFrameCtx(AVCodecContext  * codec_ctx);

int SelectCodecTagByCodecId(int codec_id);

